package org.noear.quarkus.path;


import io.quarkus.arc.Unremovable;
import io.vertx.core.spi.observability.HttpRequest;
import io.vertx.ext.web.RoutingContext;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import org.noear.quarkus.filter.StopWatchContext;
import io.vertx.core.http.HttpServerRequest;


@Unremovable // 如果这个类没被引用，必须加这个注解，不然没有引用会被 quarkus 优化掉，导致找不到 class
@ApplicationScoped // 这个是单例服务申明，基于jvm的生命周期创建;大部分都需要注入、事务、拦截器、生命周期管理的服务组件
//@Singleton  // 也可以用这个注解，在整个应用程序生命周期内仅存在一个实例‌,功能相近@ApplicationScoped
public class HelloNamePath {

    @Inject
    HttpServerRequest request;

    // 用 RoutingContext 完整控制请求/响应
    public void hello(RoutingContext rc) {
        String name = rc.pathParam("name"); // 前置响应时，因为路由未解析，所以无法获取到name
        System.out.println("path->"+request.path());
        rc.response().end("Hello " + (name == null ? "world" : name));
    }

    // 一个阻塞工作，演示如何处理阻塞场景（在上面注册时需使用 blockingHandler）
    public String doBlockingWork() {
        // 长时间计算/IO...
        return "done";
    }
}